﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Aurora.WebApp.Models;
using Aurora.WebApp.ViewModel.Employee;
using Aurora.WebApp.Filters;
using Aurora.WebApp.Helpers;

namespace Aurora.WebApp.Controllers
{
    public class EmployeeController : BaseController
    {
        //
        // GET: /Employee/

        [AppAuthorize(AppRol.Administrador)]
        [ViewParameter(Section: "Mantenimientos", PageIcon: "fa fa-users", SubSection: "Trabajadores")]
        public ActionResult LstTrabajadoresAll(int? np)
        {
            ListTrabajadoresViewModel ViewModel = new ListTrabajadoresViewModel();
            ViewModel.CargarDatos(CargarDatosContext(), np, string.Empty, string.Empty);
            return View(ViewModel);
        }
        [HttpPost]
        [AppAuthorize(AppRol.Administrador)]
        [ViewParameter(Section: "Mantenimientos", PageIcon: "fa fa-users", SubSection: "Trabajadores")]
        public ActionResult LstTrabajadoresAll(int? np, string TRA_CODIGO, string TRA_NOMBRE)
        {
            ListTrabajadoresViewModel ViewModel = new ListTrabajadoresViewModel();
            ViewModel.CargarDatos(CargarDatosContext(), np, TRA_CODIGO, TRA_NOMBRE);
            return View(ViewModel);
        }

        [AppAuthorize(AppRol.Administrador)]
        [ViewParameter(Section: "Mantenimientos", PageIcon: "fa fa-users", SubSection: "Trabajadores")]
        public ActionResult AddEditTrabajador(int? TRA_ID)
        {
            AddEditTrabajadorViewModel ViewModel = new AddEditTrabajadorViewModel();
            ViewModel.CargarDatos(CargarDatosContext(), TRA_ID);
            return View(ViewModel);
        }

        [HttpPost]
        public ActionResult AddEditTrabajador(AddEditTrabajadorViewModel ViewModel)
        {
            try
            {
                if (ViewModel.TRA_ID.HasValue)
                {
                    Trabajador _trabajador = context.Trabajador.FirstOrDefault(x => x.TRA_ID == ViewModel.TRA_ID);
                    if (_trabajador != null)
                    {
                        _trabajador.TRA_CODIGO = ViewModel.TRA_CODIGO;
                        _trabajador.TRA_CONTRASENA = !string.IsNullOrEmpty(ViewModel.TRA_CONTRASENA) ? ViewModel.TRA_CONTRASENA : _trabajador.TRA_CONTRASENA;
                        _trabajador.TRA_DNI = ViewModel.TRA_DNI;
                        _trabajador.TRA_NOMBRE = ViewModel.TRA_NOMBRE;
                        context.Entry(_trabajador).State = System.Data.EntityState.Modified;
                    }
                }
                else
                {
                    Trabajador _trabajador = new Trabajador();
                    _trabajador.TRA_CODIGO = ViewModel.TRA_CODIGO;
                    _trabajador.TRA_CONTRASENA = ViewModel.TRA_CONTRASENA;
                    _trabajador.TRA_DNI = ViewModel.TRA_DNI;
                    _trabajador.TRA_ESTADO = ConstantHelpers.EST_ACTIVO;
                    _trabajador.TRA_NOMBRE = ViewModel.TRA_NOMBRE;
                    context.Trabajador.Add(_trabajador);
                }
                context.SaveChanges();
                PostMessage(MessageType.Success);
            }
            catch { PostMessage(MessageType.Error); }
            return RedirectToAction("LstTrabajadoresAll");
        }

        [AppAuthorize(AppRol.Administrador)]
        public ActionResult ConfirmDeleteTrabajador(int TRA_ID)
        {
            DeleteTrabajadorViewModel ViewModel = new DeleteTrabajadorViewModel();
            ViewModel.CargarDatos(CargarDatosContext(), TRA_ID);
            return PartialView("_DeleteTrabajador", ViewModel);
        }

        [HttpPost]
        public ActionResult DeleteTrabajador(int TRA_ID)
        {
            try
            {
                Trabajador _trabajador = context.Trabajador.FirstOrDefault(x => x.TRA_ID == TRA_ID);
                if (_trabajador != null)
                {
                    if (_trabajador.TrabajadorXSucursal.Count > 0) PostMessage(MessageType.Info, "No se puede eliminar el elemento porque tiene asignaciones pendientes");
                    else
                    {
                        _trabajador.TRA_ESTADO = ConstantHelpers.EST_INACTIVO;
                        PostMessage(MessageType.Success);
                    }
                }
                context.SaveChanges();                
            }
            catch { PostMessage(MessageType.Error); }
            return RedirectToAction("LstTrabajadoresAll");
        }
    }
}
